package com.dabai.iot.core.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dabai.common.tenant.core.TenantEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 设备表 实体类
 *
 * @author kev1n
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("iot_device")
public class DeviceEntity extends TenantEntity {

    /**
     * 主键id
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 产品Id
     */
    @Schema(description = "产品Id")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long productId;

    /**
     * 产品Key
     */
    @Schema(description = "产品Key")
    private String productKey;

    /**
     * 自定义设备名称
     */
    @Schema(description = "自定义设备名称")
    private String deviceName;

    /**
     * 设备序列号
     */
    @Schema(description = "设备序列号")
    private String deviceSn;

    /**
     * 设备密钥
     */
    @Schema(description = "设备密钥")
    private String deviceSecret;

    /**
     * 设备描述
     */
    @Schema(description = "设备描述")
    private String deviceDesc;

    /**
     * 激活状态 0:未激活 1:已激活
     */
    @Schema(description = "激活状态 0:未激活 1:已激活")
    private Integer isActive;

    /**
     * 激活时间
     */
    @Schema(description = "激活时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date activeTime;

    /**
     * 在线状态 1:在线 0:离线
     */
    @Schema(description = "在线状态 1:在线 0:离线")
    private Integer isOnline;

    /**
     * 最后上线时间
     */
    @Schema(description = "最后上线时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastOnlineTime;

    /**
     * 最后离线时间
     */
    @Schema(description = "最后离线时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastOfflineTime;

    /**
     * 启禁用 1:启用 0:禁用
     */
    @Schema(description = "启禁用 1:启用 0:禁用")
    private Integer isEnabled;

    /**
     * 数据格式 1:JSON 2:Plaintext
     */
    @Schema(description = "数据格式 1:JSON 2:Plaintext")
    private String dataType;

    /**
     * 纬度
     */
    @Schema(description = "纬度")
    private BigDecimal latitude;

    /**
     * 经度
     */
    @Schema(description = "经度")
    private BigDecimal longitude;

    /**
     * 设备地址
     */
    @Schema(description = "设备地址")
    private String address;

    /**
     * 删除标志（0存在 1删除）
     */
    @TableLogic
    private String delFlag;

}
